package com.wankuma.hcm.midlet.metwit;
import java.util.Calendar;
import java.util.Vector;

/**
 * ステータスのオンメモリ表現およびタイムラインの管理を行うクラスです。
 * @author Harada Hirotsugu
 *
 */
public class Status {
	private String createAt;
	private long id;
	private String source;
	private String text;
	private long userId;
	private String name;
	private String screenName;
	private boolean readed;

	public static final int FRIENDS = 1;
	public static final int REPLIES = 2;
	public static final int ARCHIVE = 3;
	public static final int PUBLIC = 4;
	public static final int RECIEVED_DM = 5;
	public static final int SENT_DM = 6;

	private static Vector friendsTimeLine = new Vector();
	private static Vector repliesTimeLine = new Vector();
	private static Vector archiveTimeLine = new Vector();
	private static Vector publicTimeLine = new Vector();
	private static Vector recievedDMTimeLine = new Vector();
	private static Vector sentDMTimeLine = new Vector();

	private static Calendar friendsLastModified;
	private static Calendar repliesLastModified;
	private static Calendar archiveLastModified;
	private static Calendar recievedDMLastModified;
	private static Calendar sentDMLastModified;
	
	
	public Status() {
	}
	
	/**
	 * 投稿日時を文字列形式で取得します。
	 * @return 投稿日時を表すString
	 */
	
	public String getCreateAt() {
		return createAt;
	}

	/**
	 * 投稿日時を文字列形式で設定します。
	 * @param createAt 投稿日時を表すString
	 */
	public void setCreateAt(String createAt) {
		this.createAt = createAt;
	}
	
	/**
	 * 投稿IDを取得します。
	 * @return 投稿ID
	 */
	public long getId() {
		return id;
	}

	/**
	 * 投稿IDを設定します。
	 * @param id 投稿ID
	 */
	public void setId(long id) {
		this.id = id;
	}

	/**
	 * クライアント名を取得します。
	 * @return クライアント名
	 */
	public String getSource() {
		return source;
	}

	/**
	 * クライアント名を設定します。
	 * @param s クライアント名
	 */
	public void setSource(String s) {
		this.source = s;
	}
	
	/**
	 * 本文を取得します。
	 * @return 本文
	 */
	public String getText() {
		return text;
	}

	/**
	 * 本文を設定します。
	 * @param s 本文
	 */
	public void setText(String s) {
		this.text = s;
	}

	/**
	 * ユーザIDを取得します。
	 * @return ユーザID
	 */
	public long getUserId() {
		return userId;
	}
	
	/**
	 * ユーザIDを設定します。
	 * @param userId ユーザID
	 */
	public void setUserId(long userId) {
		this.userId = userId;
	}

	/**
	 * ユーザの本名を取得します。
	 * @return 本名
	 */
	public String getName() {
		return name;
	}

	/**
	 * ユーザの本名を設定します。
	 * @param s  本名
	 */
	public void setName(String s) {
		this.name = s;
	}

	/**
	 * ユーザの表示名を取得します。
	 * @return 表示名
	 */
	public String getScreenName() {
		return screenName;
	}

	/**
	 * ユーザの表示名を設定します。
	 * @param s 表示名
	 */
	public void setScreenName(String s) {
		this.screenName = s;
	}

	public boolean isReaded() {
		return readed;
	}

	public void setReaded() {
		this.readed = true;
	}

	/**
	 * タイムラインを取得します。
	 * @param tlid タイムラインID
	 * @return タイムラインを保持するVector
	 */
	public static Vector getTimeLine(int tlid) {
		switch (tlid) {
		case FRIENDS:
			return friendsTimeLine;
		case REPLIES:
			return repliesTimeLine;
		case ARCHIVE:
			return archiveTimeLine;
		case PUBLIC:
			return publicTimeLine;
		case RECIEVED_DM:
			return recievedDMTimeLine;
		case SENT_DM:
			return sentDMTimeLine;
		default:
			throw new IllegalArgumentException();
		}
	}
	
	/**
	 * タイムラインの最終取得日時を取得します。
	 * @param tlid タイムラインID
	 * @return 最終取得日時を表すCalendar
	 */
	public static Calendar getLastModified(int tlid){
		switch (tlid) {
		case FRIENDS:
			return friendsLastModified;
		case REPLIES:
			return repliesLastModified;
		case ARCHIVE:
			return archiveLastModified;
		case PUBLIC:
			return null;
		case RECIEVED_DM:
			return recievedDMLastModified;
		case SENT_DM:
			return sentDMLastModified;
		default:
			throw new IllegalArgumentException();
		}
	}
	
	/**
	 * タイムラインの最終取得日時を設定します。
	 * @param tlid タイムラインID
	 * @param cal 最終取得日時を表すCalendar
	 */
	public static void setLastModified(int tlid, Calendar cal){
		switch (tlid) {
		case FRIENDS:
			Status.friendsLastModified = cal;
			break;
		case REPLIES:
			Status.repliesLastModified = cal;
			break;
		case ARCHIVE:
			Status.archiveLastModified = cal;
			break;
		case PUBLIC:
			break;
		case RECIEVED_DM:
			Status.recievedDMLastModified = cal;
			break;
		case SENT_DM:
			Status.sentDMLastModified = cal;
			break;
		default:
			throw new IllegalArgumentException();
		}
		
	}
}
